package com.tanhua.sso.service.impl;

import com.tanhua.sso.service.SendSms;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;

import java.util.Random;

/**
 * 模拟短信验证码发送服务（业务层）
 * 注意：此类仅用于测试，不会真正发送短信或与持久层交互
 */
@Primary
@Component
public class TestSendSms implements SendSms {
    // 验证码长度常量
    private static final int CODE_LENGTH = 6;
    // 手机号正则（中国大陆）
    private static final String PHONE_REGEX = "^1[3-9]\\d{9}$";

    /**
     * 模拟发送短信验证码
     * @param phoneNumber 手机号码
     * @return 6位数字验证码（字符串形式）
     * @throws IllegalArgumentException 当手机号格式无效时抛出
     */
    @Override
    public String sendSms(String phoneNumber) {
        // 1. 验证手机号格式
        if (!isValidPhoneNumber(phoneNumber)) {
            throw new IllegalArgumentException("无效的手机号码格式");
        }

        // 2. 生成随机验证码
        String verificationCode = generateRandomCode();

        // 3. 模拟发送操作（此处仅打印日志）
        System.out.printf("[模拟] 验证码已发送至 %s：%s%n", phoneNumber, verificationCode);

        return verificationCode;
    }

    /**
     * 验证手机号格式
     * @param phoneNumber 待验证手机号
     * @return 是否有效
     */
    private boolean isValidPhoneNumber(String phoneNumber) {
        // 基础空值检查
        if (phoneNumber == null || phoneNumber.trim().isEmpty()) {
            return false;
        }
        // 正则匹配（中国大陆手机号）
        return phoneNumber.matches(PHONE_REGEX);
    }

    /**
     * 生成6位随机数字验证码
     * @return 验证码字符串
     */
    private String generateRandomCode() {
        Random random = new Random();
        StringBuilder code = new StringBuilder();

        for (int i = 0; i < CODE_LENGTH; i++) {
            code.append(random.nextInt(10)); // 生成0-9的随机数
        }

        return code.toString();
    }


}

